home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE15 / CPPCLASS / cpp32 / CPPCLU.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-07-17  |  3.1 KB  |  127 lines

  1. unit Cppclu;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, StdCtrls, ExtCtrls;
  8.  
  9. type
  10.  
  11.    TCPPNotifyEvent = procedure(Sender: TObject) pascal of object;
  12.   { Mirror of the real C++ class - note the additional method attributes }
  13.   TDLLClass = class
  14.     procedure SetValue(Info : integer);         virtual; pascal; abstract;
  15.     function  GetValue : integer;               virtual; pascal; abstract;
  16.     procedure SetEvent(func : TCPPNotifyEvent); virtual; pascal; abstract;
  17.   public
  18.     procedure ShowTheValue;  virtual; pascal; abstract;
  19.     procedure DoEvent;       virtual; pascal; abstract;
  20.     property AnEvent : TCPPNotifyEvent   write SetEvent;
  21.     property DLLValue: integer read GetValue write SetValue;
  22.   end;
  23.  
  24.   TForm1 = class(TForm)
  25.     Button1: TButton;
  26.     Button2: TButton;
  27.     Button3: TButton;
  28.     Button4: TButton;
  29.     Button5: TButton;
  30.     Button6: TButton;
  31.     procedure Button1Click(Sender: TObject);
  32.     procedure Button2Click(Sender: TObject);
  33.     procedure Button3Click(Sender: TObject);
  34.     procedure Button4Click(Sender: TObject);
  35.     procedure Button5Click(Sender: TObject);
  36.     procedure Button6Click(Sender: TObject);
  37.     private
  38.        procedure DisEnableAllButtons;
  39.     public
  40.  
  41.     procedure bProc(Sender: TObject); pascal;
  42.     procedure cProc(Sender: TObject); pascal;
  43.   end;
  44.  
  45.  
  46. var
  47.   Form1: TForm1;
  48.   { Instance of C++ class created in C++ DLL }
  49.   ACppClass : TDLLClass;
  50.  
  51.  
  52. implementation
  53.  
  54. {$R *.DFM}
  55.  
  56. { Make a C++ class }
  57. function  _ConstructClass         : TDllClass;  cdecl external 'CPPDLL32';
  58. procedure _DestructClass(DLLClass : TDllClass); cdecl external 'CPPDLL32';
  59.  
  60. procedure TForm1.bProc(Sender: TObject);
  61. begin
  62.   Color   := clRed;
  63.   Caption := 'a GeneralEvent';
  64. end;
  65.  
  66. procedure TForm1.cProc(Sender: TObject);
  67. begin
  68.   Color   := clGreen;
  69.   Caption := 'another GeneralEvent';
  70. end;
  71.  
  72. procedure TForm1.Button1Click(Sender: TObject);
  73. begin
  74.   ACppClass := _ConstructClass;
  75.   if ACppClass <> nil then
  76.     DisEnableAllButtons;
  77. end;
  78.  
  79. procedure TForm1.DisEnableAllButtons;
  80. var
  81.   i : integer;
  82. begin
  83.    {Flip all buttons to opposite state}
  84.    for i := 0 to ControlCount-1 do
  85.      if Controls[i] is TButton then
  86.        with TButton(Controls[i]) do
  87.            Enabled := not Enabled;
  88. end;
  89.  
  90. procedure TForm1.Button2Click(Sender: TObject);
  91. begin
  92.   with ACppClass do
  93.   begin
  94.     { Call methods of C++ object }
  95.     ShowMessage(Format('C++ class Before: %d', [DLLValue]));
  96.     DLLValue := DLLValue + 10;
  97.     ShowMessage(Format('C++ class After: %d', [DLLValue]));
  98.     ShowThevalue;
  99.   end;
  100. end;
  101.  
  102. procedure TForm1.Button3Click(Sender: TObject);
  103. begin
  104.    ACppClass.AnEvent := bProc;
  105. end;
  106.  
  107. procedure TForm1.Button4Click(Sender: TObject);
  108. begin
  109.   ACppClass.AnEvent  := cProc;
  110. end;
  111.  
  112. procedure TForm1.Button5Click(Sender: TObject);
  113. begin
  114.   ACppClass.DoEvent;
  115. end;
  116.  
  117. procedure TForm1.Button6Click(Sender: TObject);
  118. begin
  119.    _DestructClass(ACppClass);
  120.    ACppClass := nil;
  121.     if ACppClass = nil then
  122.      DisEnableAllButtons;
  123.  
  124. end;
  125.  
  126. end.
  127.